FIPS PUB 202
FIPS PUB 202
連邦情報処理標準
出版物
SHA-3標準:順列ベースハッシュおよび
拡張可能な出力関数
カテゴリ: コンピュータセキュリティ サブカテゴリ: 暗号化
概要
本規格は、バイナリデータに対するセキュアハッシュアルゴリズム3(SHA-3)ファミリの関数を規定する。各SHA-3関数は、NISTがSHA-3暗号ハッシュアルゴリズムコンペティションで優勝したKECCAKアルゴリズムのインスタンスに基づいている。本規格はまた、KECCAKの基礎となる順列を含む、数学的順列のKECCAK-pファミリを規定し、順列ベースの暗号関数の開発を促進する。
SHA-3ファミリは、SHA3-224、SHA3-256、SHA3-384、SHA3-512と呼ばれる4つの暗号ハッシュ関数と、SHAKE128およびSHAKE256と呼ばれる2つの拡張可能出力関数(XOF)で構成される。
ハッシュ関数は、1) デジタル署名の生成と検証、2) 鍵導出、3) 疑似乱数ビット生成など、多くの重要な情報セキュリティアプリケーションの構成要素である。この規格で規定されているハッシュ関数は、セキュアハッシュ規格であるFIPS 180-4で規定されているSHA-1ハッシュ関数およびSHA-2ファミリーのハッシュ関数を補完するものです。
拡張可能出力関数はハッシュ関数とは異なりますが、追加のセキュリティ上の考慮事項を条件として、個々のアプリケーションの要件に直接適応できる柔軟性を備えており、同様の方法で使用できます。
キーワード:コンピュータセキュリティ、暗号化、拡張可能出力関数、連邦情報処理規格、ハッシュアルゴリズム、ハッシュ関数、情報セキュリティ、KECCAK、メッセージダイジェスト、順列、SHA-3、スポンジ構造、スポンジ関数、XOF。
連邦情報処理標準規格 202
2015年8月
SHA-3標準:順列ベースハッシュおよび拡張可能な出力関数
の発表
連邦情報処理標準出版物(FIPS PUBS)は、1996年情報技術管理改革法(公法104-106)第5131条および1987年コンピュータセキュリティ法(公法100-235)に基づき、商務長官の承認を得て、米国国立標準技術研究所(NIST)によって発行されます。
1. 標準名称:SHA-3標準:順列ベースハッシュおよび拡張可能出力関数(FIPS PUB 202)。
2. 標準カテゴリ:コンピュータセキュリティ標準、暗号化。
3. 説明:この標準(FIPS 202)は、バイナリデータに対するセキュアハッシュアルゴリズム3(SHA-3)ファミリの関数を規定しています。 SHA-3の各関数は、NISTがSHA-3暗号ハッシュアルゴリズムコンペティションで優勝したKECCAKアルゴリズムのインスタンスに基づいています。本規格では、KECCAKの基礎となる順列を含む、KECCAK-pファミリの数学的順列も規定しています。これらの順列は、将来規定される可能性のある追加の暗号関数の主要構成要素として利用できます。
SHA-3ファミリは、4つの暗号ハッシュ関数と2つの拡張可能出力関数(XOF)で構成されています。暗号ハッシュ関数は、SHA3-224、SHA3-256、SHA3-384、SHA3-512と呼ばれ、XOFはSHAKE128とSHAKE256と呼ばれます。
ハッシュ関数では、入力はメッセージと呼ばれ、出力は(メッセージ)ダイジェストまたはハッシュ値と呼ばれます。メッセージの長さは変化する可能性がありますが、ダイジェストの長さは固定です。暗号ハッシュ関数は、衝突耐性や原像不可能性といった、情報セキュリティにおける多くのアプリケーションで重要な特殊な特性を提供するように設計されたハッシュ関数です。例えば、メッセージ自体ではなくダイジェストがデジタル署名されている場合、暗号ハッシュ関数はデジタル署名方式のセキュリティと効率性を向上させます。この場合、ハッシュ関数の衝突耐性は、元のメッセージが同じハッシュ値、つまり同じ署名を持つ別のメッセージに変更されることが不可能であることを保証します。暗号ハッシュ関数の他の用途としては、疑似乱数ビット生成、メッセージ認証コード、鍵導出関数などがあります。
この標準で規定されている4つのSHA-3ハッシュ関数は、FIPS 180-4 1 で規定されているハッシュ関数(SHA-1およびSHA-2ファミリ)を補完するものです。両標準は根本的に異なる設計原理に基づいているため、ハッシュ関数解析における将来の進歩に対する耐性を備えています。設計の多様性に加えて、この標準のハッシュ関数は、FIPS 180-4のハッシュ関数に対して補完的な実装特性と性能特性を備えています。 XOFの場合、出力の長さは個々のアプリケーションの要件に合わせて選択できます。XOFは、ハッシュ関数に特化することも、追加のセキュリティ考慮事項を適用することも、他のさまざまなアプリケーションに使用することもできます。XOFの承認された用途は、NIST Special Publicationsで規定されます。
KECCAK-p順列は、認証や暗号化のための鍵付き関数を含む、さまざまな暗号関数の主要コンポーネントとして適しているように設計されています。 6つのSHA-3関数は、$ KECCAK-p[1600,24] 順列の動作モード(モード)と考えることができます。将来的には、この順列または他のKECCAK-p順列の追加モードがFIPS出版物またはNIST特別出版物で規定され、承認される可能性があります。
4. 承認機関:商務長官
5. 維持機関:米国商務省、国立標準技術研究所(NIST)、情報技術研究所(ITL)。
6. 適用範囲:本規格は、米国法典第10編第2315条(10 USC 2315)の適用を受けず、かつ米国法典第40編第11103条(a)(1)(40 USC 11103(a)(1))に定義される国家安全保障システムの範囲外である、機微な非機密情報の保護に関して、すべての連邦政府省庁および機関に適用される。連邦政府のアプリケーションにおいて安全なハッシュアルゴリズムが必要とされる場合(他の暗号アルゴリズムおよびプロトコルの構成要素としての使用を含む)、本規格または連邦情報処理規格(FIPS)180のいずれかを実装しなければならない。本規格は、連邦政府機関以外でも採用および使用することができる。
7. 仕様:連邦情報処理標準(FIPS)202、SHA-3標準:
順列ベースのハッシュおよび拡張可能出力関数(添付)。
8. 実装:連邦政府機関は、KECCAK-p順列の実装を、本標準で規定されているSHA-3関数など、FIPS承認またはNIST推奨の動作モード内でのみ使用しなければならない。SHA-3関数は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組み合わせで実装することができる。暗号アルゴリズム検証プログラムによって検証されたこれらの関数の実装のみが、本標準に準拠しているとみなされる。検証プログラムに関する情報は、http://csrc.nist.gov/groups/STM/cavp/index.html で入手可能である。 9. 実装スケジュール:本規格は即時発効します。NIST特別出版物の新規または改訂版の発行に依存する本規格の適用または拡張は、対応する特別出版物の最終発行時に発効します。
10. 特許:本規格のSHA-3関数の実装は、米国または外国の特許によって保護されている場合があります。
11. 輸出管理:特定の暗号装置およびそれらに関する技術データは、連邦輸出規制の対象となります。本規格を実装した暗号モジュールおよびそれらに関する技術データの輸出は、これらの連邦規制に準拠し、米国商務省輸出管理局の許可を得る必要があります。輸出規制に関する情報は、http://www.bis.doc.gov/index.htm で入手できます。 12. 資格:本規格は、情報セキュリティアプリケーションに適した構成要素となる数学関数を規定していますが、本規格への適合は、特定の実装が安全であることを保証するものではありません。各機関または省庁の責任当局は、全体的な実装が許容可能なレベルのセキュリティを提供することを保証するものとします。
本規格は、その適切性を評価するため、5年ごとに見直されます。
13. 免除手続き:連邦情報セキュリティマネジメント法(FISMA)は、商務長官によって義務付けられたFIPSの免除を認めていません。
連邦情報処理標準規格 202
SHA-3 標準:順列ベースハッシュおよび拡張可能出力関数
1 はじめに
この規格は、FIPS 180-4 $ [1] で規定されているSHA-1およびSHA-2ハッシュ関数ファミリを補完する新しい関数ファミリを規定する。SHA-3(Secure Hash Algorithm-3)と呼ばれるこのファミリは、NISTが公開SHA-3暗号ハッシュアルゴリズムコンペティション $ [3] で優勝したアルゴリズム$ ^1 であるKECCAK $ [2] に基づいている。SHA-3ファミリは、4つの暗号ハッシュ関数と2つの拡張可能出力関数から構成される。これら6つの関数は、$ [4] で説明されているスポンジ構造という構造を共有しており、この構造を持つ関数はスポンジ関数と呼ばれる。
$ ^1 より正確には、このコンテストでは4つのハッシュ関数が求められており、KECCAKはより大きな関数群です。
ハッシュ関数は、出力の長さが固定された$ ^2 バイナリデータ(すなわちビット列)に対する関数である。ハッシュ関数への入力はメッセージと呼ばれ、出力は(メッセージ)ダイジェストまたはハッシュ値と呼ばれる。ダイジェストは、多くの場合、メッセージの凝縮表現として機能する。 SHA-3ハッシュ関数は4つあり、それぞれSHA3-224、SHA3-256、SHA3-384、SHA3-512と命名されています。それぞれ、ダッシュの後の接尾辞はダイジェストの固定長を示します。例えば、SHA3-256は256ビットのダイジェストを生成します。SHA-2ハッシュ関数(SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256)は、同じダイジェスト長を提供します。したがって、SHA-3ハッシュ関数はSHA-2関数の代替として実装でき、その逆も可能です。
$ ^2 多くのハッシュ関数では、入力データの長さに(非常に大きな)上限が存在します。
拡張可能出力関数(XOF)は、ビット文字列(メッセージとも呼ばれる)に対する関数で、出力を任意の長さに拡張できます。 SHA-3の2つのXOFは、それぞれSHAKE128とSHAKE256と名付けられています。$ ^3 接尾語「128」と「256」は、これらの関数が一般的$ ^4 にサポートできるセキュリティ強度を示します。これは、ハッシュ関数の接尾語がダイジェスト長を示すのとは対照的です。SHAKE128とSHAKE256は、NISTが標準化した最初のXOFです。
$ ^3 「SHAKE」という名称は、$ [5] で「Secure Hash Algorithm」と「KECCAK」という用語を組み合わせて提案されました。
$ ^4 出力長が十分に小さい場合は例外です。詳細はA.1節の議論を参照してください。
6つのSHA-3関数は、衝突攻撃、原像攻撃、第二原像攻撃への耐性といった特殊な特性を提供するように設計されています。これら3種類の攻撃に対する耐性レベルは、セクションA.1にまとめられています。暗号ハッシュ関数は、デジタル署名の生成と検証、鍵導出、疑似乱数ビット生成など、様々な情報セキュリティアプリケーションにおける基本的な構成要素です。
FIPS承認ハッシュ関数のダイジェスト長は、160、224、256、384、512ビットです。アプリケーションが非標準のダイジェスト長を持つ暗号ハッシュ関数を必要とする場合、ハッシュ関数の複数回の呼び出しや出力ビットの切り捨てを伴う構成に代わる自然な代替手段としてXOFが挙げられます。ただし、XOFはセクションA.2で説明されている追加のセキュリティ上の考慮事項の対象となります。
6つのSHA-3関数はそれぞれ、スポンジ構造の主要構成要素と同じ基礎的な順列を採用しています。実質的に、SHA-3関数は順列の動作モードです。本標準では、順列はKECCAK-pと呼ばれる順列ファミリのインスタンスとして規定されており、将来の文書で追加モードが開発される際に、そのサイズとセキュリティパラメータを変更できる柔軟性を提供しています。
4つのSHA-3ハッシュ関数は、SHA-3コンペティション$ [3] で提案されたKECCAKのインスタンスとは若干異なります。特に、SHA-3ハッシュ関数をSHA-3 XOFと区別し、個々のアプリケーションドメイン専用のSHA-3関数の新しいバリアントの開発を容易にするために、メッセージに2ビットのサフィックスが付加されています。
2つのSHA-3 XOFも、専用のバリアントの開発を可能にする方法で規定されています。さらに、SHA-3 XOFは、ツリーハッシュ$ [7] 用のSakuraコーディングスキーム$ [6] と互換性があり、XOFの並列化可能な変種の開発をサポートします。これらの変種は、別の文書で規定される予定です。
この標準の表記法と用語のほとんどは、$ [8] のKECCAKの仕様と一致しています。
2 用語集 GLOSSARY
2.1 用語と頭字語 Terms and Acronyms
bit 2進数:0または1。この規格では、ビットはCourier Newフォントで表記されます。
byte 8ビットのシーケンス。
capacity スポンジ構造では、基となる関数の幅からレートを引いた値になります。
column 状態配列の場合、定数のx座標とz座標を持つ5ビットのサブ配列。
digest 暗号学的ハッシュ関数の出力。ハッシュ値とも呼ばれる。
domain separation 関数において、入力を異なるアプリケーションドメインに分割し、どの入力も複数のドメインに割り当てられないようにすること。
extendable-output function(XOF) ビット列に対する関数で、出力を任意の長さに拡張できる。 FIPS Federal Information Processing Standard. 連邦情報処理基準
FISMA Federal Information Security Management Act. 連邦情報セキュリティ管理法
hash function ビット列に対する関数で、出力の長さが固定されている。出力は多くの場合、入力の簡略化された表現として機能する。
hash value ハッシュ値 digest参照
HMAC Keyed-Hash Message Authentication Code. キー付きハッシュメッセージ認証コード。
KDF Key derivation function. 鍵導出関数。
Keccak KECCAK-f 置換を基底関数とし、マルチレートパディングをパディング規則とするすべてのスポンジ関数のファミリー。KECCAK は元々 8 で規定された。 lane 幅bのKECCAK-p順列の状態配列の場合、定数xおよびy座標を持つb/25ビットのサブ配列。
message SHA-3関数への入力となる、任意の長さのビット列。
multi-rate padding パディングルール pad10*1 の出力は、1、それに続く (空の場合もある) 0 の列、そして 1 です。
NIST National Institute of Standards and Technology. 米国国立標準技術研究所
plane 幅bのKECCAK-p順列の状態配列の場合、定数y座標を持つb/5ビットのサブ配列。
rate スポンジ構造では、基となる関数の呼び出しごとに処理される入力ビット数、または生成される出力ビット数を指します。
round KECCAK-p順列の計算において反復されるステップマッピングのシーケンス。
round constant KECCAK-p順列の各ラウンドにおいて、ラウンドインデックスによって決定されるレーン値が存在する。ラウンド定数は、ιステップマッピングへの2番目の入力となる。
round index KECCAK-p順列のラウンドを表す整数インデックスの値。
row
SHA-3
SHAKE
sheet
slice
sponge construction
sponge function
state
state array
step mapping
string
width
XOF
XOR
2.2 アルゴリズムパラメータとその他の変数 Algorithm Parameters and Other Variables
2.3 基本操作と関数 Basic Operations and Functions
2.4 指定された機能 Specified Functions
3 KECCAK-p 順列 PERMUTATIONS
4 スポンジ構造 SPONGE CONSTRUCTION
5 KECCAK
KECCAKはスポンジ関数のファミリーであり、元々は8で定義されました。KECCAKのパディング規則はマルチレートパディングと呼ばれ、5.1節で規定されています。KECCAKのパラメータと基礎となる順列は5.2節で説明されており、より小規模なKECCAK関数ファミリーであるKECCAKcが明示的に規定されており、これは6節のSHA-3関数を定義するのに十分です。 5.1 pad10*1 の仕様
アルゴリズム 9: pad10*1(x, m)
入力:
正の整数 x;
非負の整数 m。
出力:
m + len(P) が x の正の倍数となるような文字列 P。
手順:
1. j = (- m - 2) mod x とする。
2. $ P = 1 || 0^j || 1 を返す。
したがって、「pad10*1」のアスタリスクは、必要な長さの出力文字列を生成するために、必要に応じて「0」ビットが省略されるか繰り返されることを示します。
5.2 KECCAK$ [c の仕様]
KECCAKは、$ KECCAK-p[b, 12 + 2l] 順列(3.3節で定義)を基礎関数とし、pad10*1(5.1節で定義)をパディング規則とするスポンジ関数の族である。この族は、レートrと容量cの任意の選択によってパラメータ化され、$ r + cは {25, 50, 100, 200, 400, 800, 1600}、すなわち表1のbの7つの値のいずれかとなる。
b = 1600の場合に限定する場合、KECCAK族は$ KECCAK[c] と表記される。この場合、rはcの選択によって決定される。特に、
$ KECCAK[c] = SPONGE[KECCAK-p[1600, 24], pad10*1, 1600 – c] .
したがって、入力ビット列Nと出力長dが与えられた場合、
$ KECCAK[c] (N, d) = SPONGE[KECCAK-p[1600, 24], pad10*1, 1600 – c] (N, d)
となります。
6. SHA-3 関数仕様
セクション 6.1 では、4 つの SHA-3 ハッシュ関数が定義され、セクション 6.2 では、2 つの SHA-3 XOF が定義されています。セクション 6.3 では、各 SHA-3 XOF の代替定義が中間関数の観点から示されています。 6.1 SHA-3 ハッシュ関数 SHA-3 Hash Functions
メッセージ M が与えられた場合、セクション 5.2 で指定された KECCAK[c] 関数から、M に 2 ビットのサフィックスを追加し、出力の長さを指定することによって、4 つの SHA-3 ハッシュ関数が次のように定義されます:
code:sha3
SHA3-224(M) = KECCAK448 (M || 01, 224); SHA3-256(M) = KECCAK512 (M || 01, 256); SHA3-384(M) = KECCAK768 (M || 01, 384); SHA3-512(M) = KECCAK1024 (M || 01, 512). いずれの場合も、容量はダイジェスト長の 2 倍、つまり c = 2d であり、結果として得られる KECCAK[c] への入力 N は、サフィックスが追加されたメッセージ、つまり N = M || 01 です。サフィックスはドメイン分離をサポートします。つまり、SHA-3 ハッシュ関数から発生する KECCAK[c] への入力を、セクション 6.2 で定義された SHA-3 XOF から発生する入力、および将来定義される可能性のある他のドメインから発生する入力と区別します。
6.2 SHA-3 拡張可能な出力関数 SHA-3 Extendable-Output Functions
メッセージ M が与えられた場合、2 つの SHA-3 XOF、SHAKE128 と SHAKE256 は、セクション 5.2 で指定された KECCAK[c] 関数から、任意の出力長 d に対して、M に 4 ビットの接尾辞を追加することによって定義されます。 code:shake
SHAKE128(M, d) = KECCAK256 (M || 1111, d), SHAKE256(M, d) = KECCAK512 (M || 1111, d). 追加ビット 1111 の目的については、セクション 6.3 で説明します。
6.3 SHA-3 拡張可能出力関数の代替定義 Alternate Definitions of SHA-3 Extendable-Output Functions
RawSHAKE128 と RawSHAKE256 と呼ばれる 2 つの追加のスポンジ関数は、KECCAK[c] の次のインスタンスとして定義されます。ここで、入力文字列は J で示され、出力の長さは d で示されます。
code:RawSHAKE
RawSHAKE128(J, d) = KECCAK256 (J || 11, d), RawSHAKE256(J, d) = KECCAK512 (J || 11, d). これらの関数は、セクション6.2の定義と同等のSHAKE128とSHAKE256の代替定義を可能にします。特に、
code:shakeRawshake
SHAKE128(M, d) = RawSHAKE128 (M || 11, d),
SHAKE256(M, d) = RawSHAKE256 (M || 11, d).
KECCAK[c]への次の入力Nは、これらの入力MとJのパディングの結果です。
N = J || 11 = M || 11 || 11.
B.2 Hexadecimal Form of Padding Bits
SHA-3 関数の場合、2 ビットまたは 4 ビットのサフィックスがメッセージ M に追加され、KECCAK[c] への入力文字列 N が生成され、追加のビットがマルチレート パディング ルールの一部として追加されます。ほとんどのアプリケーションでは、メッセージはバイト アラインメントされます。つまり、非負の整数 m の場合、len(M) = 8m です。この場合、メッセージに追加される q で表されるバイトの総数は、m とレート r によって次のように決定されます。
q = (r/8) – (m mod (r/8)).
この場合、q の値は、セクション B.1 で指定されている変換関数に従って、これらのバイトの 16 進形式を決定します。結果として得られるパディングされたメッセージは、表 6 にまとめられています。
table:表6 バイト整列メッセージの SHA-3 パディングの 16 進形式
SHA-3関数の型 パディングバイト数 埋められたメッセージ
Hash q=1 M || 0x86
Hash q=2 M || 0x0680
Hash q>2 M || 0x06 || 0x00... || 0x80
XOF q=1 M || 0x9F
XOF q=2 M || 0x1F80
XOF q>2 M || 0x1F || 0x00... || 0x80